-- jeli istnieje tabela w bazie danych ...
IF OBJECT_ID('dbo.Testowa_tabela') IS NOT NULL
	DROP TABLE dbo.Testowa_tabela;    -- ... to j usuwamy
GO

-- tworzymy now tabel
CREATE TABLE dbo.Testowa_tabela
(
	Id INT,
	kolumna VARCHAR(20)
)



-- jeli w bazie istnieje funkcja ...
IF OBJECT_ID('dbo.klucz_glowny') IS NOT NULL
	DROP FUNCTION dbo.klucz_glowny; -- ... to j usuwamy
GO

-- tworzymy now funkcj
CREATE FUNCTION dbo.klucz_glowny()
RETURNS INT        -- ktra zwrci wartoc typu INT
AS
BEGIN
	-- deklaracja zmiennej
	DECLARE @identyfikator INT;
	-- jeli w tabeli nie ma adnego rekordu ...
	IF (NOT EXISTS(SELECT * FROM dbo.Testowa_tabela))
		SET @identyfikator = 1  -- ... to identyfikator przyjmuje warto 1
	ELSE  -- jeli w tabeli s dane ...
		-- ... to pobieramy najmniejsz warto id, ktra nie istnieje w tabeli
		SELECT @identyfikator = MIN(Id)+1 FROM dbo.Testowa_tabela a
		WHERE NOT EXISTS (SELECT * FROM dbo.Testowa_tabela b WHERE b.id = a.id + 1)
	-- zwracamy identyfikator
	RETURN @identyfikator;
END;
GO


ALTER TABLE dbo.Testowa_tabela 
ADD DEFAULT (dbo.klucz_glowny()) FOR Id;



INSERT INTO dbo.Testowa_tabela (kolumna) VALUES ('pierwszy');
INSERT INTO dbo.Testowa_tabela (kolumna) VALUES ('drugi');
INSERT INTO dbo.Testowa_tabela (kolumna) VALUES ('trzeci');
INSERT INTO dbo.Testowa_tabela (kolumna) VALUES ('czwarty');
INSERT INTO dbo.Testowa_tabela (kolumna) VALUES ('pity');
INSERT INTO dbo.Testowa_tabela (kolumna) VALUES ('szsty');
INSERT INTO dbo.Testowa_tabela (kolumna) VALUES ('sidmy');
INSERT INTO dbo.Testowa_tabela (kolumna) VALUES ('smy');


DELETE FROM dbo.Testowa_tabela WHERE id=2;


INSERT INTO dbo.Testowa_tabela (kolumna) VALUES ('dziewity');


SELECT * FROM dbo.Testowa_tabela
 
